<?php
namespace app\services;

use app\models\MobileAdspace;
use app\models\ResourcePack;
use app\models\ResourceApp;
use app\models\ResourceAppAdspaceMap;

use app\utils\Functions as F;

class PackService extends BaseService
{
    public function getPackList()
    {
        //$packs = $this->getAll('ResourcePack', ['status' => 1]);
        $packs = ResourcePack::find()->where(['status' => 1])
            ->orderBy(['last_update' => SORT_DESC])
            ->asArray()->indexBy('id')->all();
        $appOn = 'status = 1 and resource_pack_id is not null and resource_pack_id <>""';
        $apps = $this->getAll('ResourceApp', $appOn);
        $appAdMaps = $this->getAll('ResourceAppAdspaceMap', ['status' => 1, 'adspace_type' => 3]);
        $appAds = [];
        if ($appAdMaps) {
            $adIdAppMap = array_column($appAdMaps, 'app_id', 'adspace_id');
            $appAdIds = array_column($appAdMaps, 'adspace_id');
            $appAds = $this->getAll('MobileAdspace', ['id' => $appAdIds]);
        }
        $packDims = [];
        foreach ($appAds as $adid => $ad) {
            $adId = $ad['id'];
            $adSize = $ad['ext_size'];
            $appId = $adIdAppMap[$adId];
            if (!isset($apps[$appId])) continue;
            $packId = (int) $apps[$appId]['resource_pack_id'];
            if (!isset($packs[$packId])) continue;
            $pack = $packs[$packId];
            if (isset($pack['size'])) {
                $pack['size'] = array_merge($pack['size'], explode(',', $adSize));
            } else {
                $pack['size'] = explode(',', $adSize);
            }
            $pack['size'] = array_unique($pack['size']);
            $form = $ad['size_form'];
            $pack['allowFormat'][] = $form;
            $type = $ad['format_list'];
            if (!isset($pack['type'])) {
                $pack['type'] = $type;
            } else {
                $pack['type'] .= ','.$type;
            }
            $packs[$packId] = $pack;
        }

        $maps = [
            'id'            => 'id',
            'name'          => 'name',
            'size'          => ['id', 'if (!isset($size)) return []; 
                                $v = array_values($size); 
                                return $v;'],
            'floor_price'   => 'floor_price',
            'ceiling_price' => 'ceiling_price',
            'pack_type' => ['type', '$t = "APP"; if ($v==2) $t = "WAP"; return $t;'],
            'allowFormat'   => ['id', '
                                if (!isset($allowFormat)) return "信息流";
                                $v = $allowFormat;
                                    $k = [];
                                if(in_array(3, $v)) $k[] = "开屏";
                                if(in_array(5, $v)) $k[] = "信息流";
                                if(in_array(4, $v)) $k[] = "插屏";
                                if(in_array(2, $v)) $k[] = "App Banner";
                                if(in_array(0, $v)) $k[] = "下部浮层";
                                if(in_array(1, $v)) $k[] = "Web Banner";
                                return implode(", ", $k);
                                '],
            'type'          => ['id', 'if(!isset($type)) return "JPG, PNG";
                                $types = explode(",", $type); 
                                $k = ["JPG, PNG"];
                                if (in_array(1, $types)) $k[] = "JPG, PNG";
                                if (in_array(2, $types)) $k[] = "GIF";
                                if (in_array(3, $types)) $k[] = "SWF";
                                if (in_array(4, $types)) $k[] = "TXT";
                                if (in_array(5, $types)) $k[] = "FLV";
                                if (in_array(6, $types)) $k[] = "MP4";
                                $k = array_unique($k);
                                return implode(", ", $k);
                                '],
            'modifiedDate'   => 'last_update',
        ];
        //$cates = $this->getAll('AdspaceCategory');
        //$cates = array_column($cates, 'name', 'category_id');
        $packs = $this->fieldsMap($maps, $packs);//, ['cates' => $cates]);
        return $packs;
    }

    public function getPackApps($packId)
    {
        $apps = $this->getAll('ResourceApp', ['resource_pack_id' => $packId, 'status' => 1]);
        $maps = [
            'id'            => 'id',
            'name'          => 'name',
            'floor_price'   => 'floor_price',
            'ceiling_price' => 'ceiling_price',
        ];
        return $this->fieldsMap($maps, $apps);
    }

    public function getPackLevel($type=1)
    {
        $packOn = ['status' => 1, 'type' => $type];
        $packs = $this->getAll('ResourcePack', $packOn);
        foreach ($packs as &$pack) {
            $apps = $this->getAll('ResourceApp', ['status' => 1, 'resource_pack_id' => $pack['id']]);
            !$apps && $apps = [];
            $pack['apps'] = $apps;
        }
        return $packs;
    }

    public function addMockApps()
    {
        $apps = [
            '资讯类--腾讯新闻',
            '资讯类--凤凰新闻',
            '资讯类--网易新闻',
            '资讯类--今日头条',
            '资讯类--一点资讯',
            '资讯类--搜狐新闻',
            '资讯类--南方都市报',
            '资讯类--环球时报',
            '资讯类--天天快报',
            '资讯类--东方头条',
            '资讯类--读天下',
            '视频类--优酷',
            '视频类--爱奇艺',
            '视频类--芒果TV',
            '视频类--暴风影音',
            '视频类--乐视视频',
            '视频类--搜狐视频',
            '视频类--百度视频',
            '视频类--360影视',
            '视频类--2345影视大全',
            '视频类--今日影视',
            '视频类--快手看片',
            '视频类--手机电视',
            '视频类--影音先锋',
            '视频类--西瓜视频',
            '体育类--虎扑体育',
            '体育类--懂球帝',
            '体育类--直播吧',
            '体育类--体育头条',
            '汽车类--车轮查违章',
            '汽车类--车轮考驾照',
            '汽车类--汽车百科',
            '汽车类--汽车报价',
            '汽车类--汽车动态',
            '汽车类--汽车头条',
            '汽车类--玩车达人',
            '汽车类--未来汽车',
            '汽车类--e驾校',
            '汽车类--icar',
            '汽车类--车主无忧',
            '汽车类--嘀嗒拼车',
            '汽车类--回车汽车',
            '汽车类--驾考宝典',
            '汽车类--驾校一点通',
            '汽车类--名车志',
            '汽车类--养车易',
            '汽车类--元贝考驾照',
            '社交类--微博',
            '社交类--陌陌',
            '社交类--豆瓣',
            '社交类--天涯社区',
            '社交类--凯迪社区',
            '社交类--百家论坛',
            '社交类--宽带山',
            '摄影拍照--camera360',
            '摄影拍照--Nice',
            '摄影拍照--拼立得',
            '摄影拍照--美咖相机',
            '摄影拍照--美啦',
            '摄影拍照--美丽拍',
            '摄影拍照--美人相机',
            '摄影拍照--玩图',
            '摄影拍照--画中画',
            '生活类--墨迹天气',
            '生活类--2345天气预报',
            '生活类--黄历天气',
            '生活类--即时天气',
            '生活类--天气通',
            '生活类--最美天气',
            '生活类--糖豆',
            '生活类--9块9包邮汇',
            '生活类--网上厨房',
            '生活类--郑多燕减肥操',
            '生活类--美食杰',
            '生活类--coolook',
            '生活类--爱豆',
            '生活类--九九君',
            '生活类--快美妆',
            '生活类--悦动圈',
            '生活类--悦跑圈',
            '生活类--乐动力',
            '资讯类--华尔街见闻',
            '资讯类--第一财经',
            '资讯类--大智慧',
            '资讯类--财经杂志',
            '资讯类--如意财经',
            '资讯类--天天财经',
            '生活类--往返',
            '工具类--超级课程表',
            '工具类--课程格子',
            '工具类--少儿趣配音',
            '工具类--英语趣配音',
            '社交类--宽带山',
            '休闲类--同花顺',
            '休闲类--喜马拉雅',
            '休闲类--酷狗音乐',
            '休闲类--酷我音乐',
            '休闲类--音悦台',
            '休闲类--凤凰FM',
            '休闲类--金立音乐',
            '休闲类--酷我听书',
            '休闲类--懒人听书',
            '休闲类--麦唱',
            '休闲类--蜻蜓FM',
            '休闲类--优听',
            '休闲类--余音',
            '休闲类--2048游戏',
            '休闲类--iphone小白点',
            '休闲类--N.O.V.A. 3 (禁地联盟先遣队)',
            '休闲类--Uno棋牌',
            '休闲类--暴雪游戏资讯',
            '休闲类--冰川时代村庄',
            '休闲类--冰川时代大冒险',
            '休闲类--冰川时代雪崩',
            '休闲类--冰火围城',
            '休闲类--财神抢红包',
            '休闲类--彩虹小马',
            '休闲类--炽热狙击',
            '休闲类--迪士尼梦幻王国',
            '休闲类--电视红包',
            '休闲类--斗地主',
            '休闲类--俄罗斯方块',
            '休闲类--犯罪现场调查：老虎机',
            '休闲类--钢铁侠3',
            '休闲类--孤胆车神:维加斯',
            '休闲类--黑白棋大大',
            '休闲类--混沌与秩序之英雄战歌',
            '休闲类--僵尸危机：生死之战',
            '休闲类--狂野飙车',
            '休闲类--六发左轮',
            '休闲类--龙之狂热传说',
            '休闲类--奇妙动物园',
            '休闲类--骑士对决',
            '休闲类--全面征服',
            '休闲类--全民大丰收',
            '休闲类--忍者跳跳跳',
            '休闲类--赛车总动员',
            '休闲类--扫雷',
            '休闲类--鲨鱼向前冲',
            '休闲类--闪电部队',
            '休闲类--神偷奶爸',
            '休闲类--水果快闪',
            '休闲类--斯巴达战记',
            '休闲类--糖果消消消',
            '休闲类--甜点消消乐',
            '休闲类--围棋宝典',
            '休闲类--现代战争5:眩晕风暴',
            '休闲类--消灭糖果星星',
            '休闲类--消灭星星',
            '休闲类--消消乐',
            '休闲类--小马宝莉（我的小马驹）',
            '休闲类--小小宠物店',
            '休闲类--星星消消乐',
            '休闲类--兄弟连3:战争之子',
            '休闲类--真实赛车2',
            '休闲类--真实足球2012',
            '休闲类--蜘蛛侠极限',
            '休闲类--智力棋盘',
            '女性类--贝聊',
            '女性类--智慧树',
            '女性类--开心童果',
            '女性类--妈妈帮',
            '女性类--愉悦早教',
            '女性类--智慧树',
            '女性类--平安果育儿',
            '女性类--宝宝巴士',
            '女性类--宝宝树',
            '女性类--宝贝全计划',
            '女性类--辣妈帮',
            '女性类--柚宝宝',
            '女性类--育儿管家',
            '女性类--美柚',
            '女性类--艾米丽女性时尚',
            '女性类--波波女性',
            '女性类--好女人',
            '女性类--回车女性',
            '女性类--快乐女性',
            '女性类--优视女性',
            '工具类--360浏览器',
            '工具类--360清理大师',
            '工具类--360手机卫士',
            '工具类--讯飞输入法',
            '工具类--iPad',
            '工具类--高德地图',
            '工具类--vivo',
            '工具类--WPS',
            '工具类--金山电池医生',
            '工具类--有道云笔记',
            '工具类--PM2.5/pm2.5空气质量指数',
            '工具类--UNI桌面',
            '工具类--WiFi万年钥匙',
            '工具类--高铁管家',
            '工具类--中兴桌面',
            '工具类--点传',
            '工具类--点心桌面',
            '工具类--多多便签/多多手电筒',
            '工具类--二维码扫描',
            '工具类--飞常准',
            '工具类--APP之家',
            '工具类--航班管家',
            '工具类--惠锁屏',
            '工具类--家核智能',
            '工具类--看荐',
            '工具类--酷划锁屏',
            '工具类--老板锁屏',
            '工具类--魔秀桌面',
        ];
        foreach ($apps as $app) {
            list($pack, $app) = explode('--', $app);
            $pack = trim($pack);
            $app = trim($app);
            $pack = $this->saveOn('ResourcePack', ['name' => $pack], ['name' => $pack]);
            $packId = $pack['id'];
            $appOn = ['name' => $app, 'resource_pack_id' => $packId];
            $app = $this->saveOn('ResourceApp', $appOn, $appOn);
            $appId = $app['id'];
            $usedAdIds = $this->getAll('ResourceAppAdspaceMap');
            $usedAdIds = array_column($usedAdIds, 'adspace_id');
            $adOn = '';
            if ($usedAdIds) $adOn = " type > 1 and id not in (300001, ". implode(',', $usedAdIds) .')';
            $adspaceId = MobileAdspace::find()->select(['id'])
                ->where($adOn)->asArray()->one();
            $adspaceId = $adspaceId['id'];
            if ($adspaceId && $appId) {
                $data = ['app_id' => $appId, 'adspace_id' => $adspaceId];
                $this->saveOn('ResourceAppAdspaceMap', $data, $data);
                //$this->mockReqs($adspaceId);
            }
        }
    }

    public function mockReqs($adId)
    {
        $day = '20180210';
        $reqs = rand(1000000, 1);
        $reqsData = [
            'adspaceid' => $adId,
            'reqs' => $reqs*10, 
            'shows' => $reqs, 
            'hour' => '22',
            'logdate_id' => $day,
        ];
        $on = [
            'adspaceid' => $adId,
        ];
        $cities = [
            '北京', '上海', '深圳', '广州',
            '天津', '石家庄', '呼和浩特',
            '太原', '哈尔滨', '长春', '沈阳',
            '南京', '杭州', '合肥', '福州', '南昌',
            '济南', '郑州', '武汉', '长沙',
            '广州', '南宁', '海口', '重庆',
            '贵阳', '成都', '昆明', '拉萨',
            '西安', '兰州', '银川', '西宁',
            '乌鲁木齐'
        ];
        foreach ($cities as $code => $city) {
            $reqs = rand(1000000, 1);
            $reqsData['reqs'] = $reqs*3;
            $reqsData['shows'] = $reqs;
            $reqsData['cn'] = $city;
            $reqsData['cn_city'] = $city;
            $on['cn'] = $city;
            $on['cn_city'] = $city;
            $this->saveOn('RptAppLocationHour', $on, $reqsData);
        }
    }

    public function getUnbindApp($type=1, $key='')
    {
        return $this->getPackAppCandidates('', $type, $key);
    }

    public function getPackAppCandidates($packId='', $type=1, $key='')
    {
        $on = ' status = 1 ';
        if ($packId) {
            $on .= " and resource_pack_id = $packId ";
            $pack = ResourcePack::find()->select(['type'])->where(['id' => $packId])->scalar();
            if ($pack) $type = $pack;
        } else {
            $on = "(resource_pack_id is null or resource_pack_id = '')";
        }
        if ($type) {
            $on .= " and type = $type";
        }
        if ($key) {
            $on .= " and name like '%$key%' ";
        }
        $unbindApps = ResourceApp::find()->select(['id', 'name text'])
                        ->where($on)->asArray()->all();
        if ($unbindApps) {
            return $unbindApps;
        }
        return [];
    }

    public function getBindApp($packId)
    {
        return $this->getPackAppCandidates($packId);
    }

    public function getAdspaceSizeAndExtsByAppIds($appIds)
    {
        $adspaceIds = ResourceAppAdspaceMap::find()->select(['adspace_id'])
                        ->where(['app_id' => $appIds, 'status' => 1])
                        ->asArray()->all();
        $adspaceIds = array_column($adspaceIds, 'adspace_id');
        return $this->getAdspaceSizeAndExtsByAdspaceIds($adspaceIds);
    }

    public function getAdspaceSizeAndExtsByAdspaceIds($adspaceIds)
    {
        $allowedExt = ['JPG', 'PNG'];
        $allowedSize = [];
        if ($adspaceIds) {
            $ads = MobileAdspace::find()->select(['format_list', 'ext_size'])
                    ->where(['id' => $adspaceIds])->asArray()->all();
            if ($ads) {
                $formats = array_column($ads, 'format_list');
                $sizes = array_column($ads, 'ext_size');
                $formats = implode(',', $formats);
                $sizes = implode(',', $sizes);
                $formats = explode(',', $formats);
                $sizes = explode(',', $sizes);
                $formats = array_unique($formats);
                if (in_array(2, $formats)) $allowedExt[] = 'GIF';
                if (in_array(3, $formats)) $allowedExt[] = 'SWF';
                if (in_array(4, $formats)) $allowedExt[] = 'TXT';
                if (in_array(5, $formats)) $allowedExt[] = 'FLV';
                if (in_array(6, $formats)) $allowedExt[] = 'MP4';
                sort($sizes);
                $allowedSize = array_unique($sizes);
            }
        }
        return [array_values($allowedExt), array_values($allowedSize)];
    }

    public function savePack($pack)
    {
        $name = $pack['name'];
        return $this->saveOn('ResourcePack', ['name' => $name], $pack);
    }

    public function savePackApp($packId, $appIds)
    {
        $sql = "update {{%resource_app}} set resource_pack_id = NULL where resource_pack_id = $packId";
        $this->executeSql($sql);
        $saved = true;
        foreach ($appIds as $appId) {
            $data = ['resource_pack_id' => $packId];
            $isSaved = $this->saveOn('ResourceApp', ['id' => $appId], $data);
            if (!$isSaved || !isset($isSaved['resource_pack_id'])) {
                $saved = false;
            }
        }
        return $saved;
    }
}//end
